package org.example.analysis.model.entity;

import lombok.Data;
import lombok.experimental.Accessors;

import java.util.Date;

/**
 * 入口方法信息
 */
@Data
@Accessors(chain = true)
public class EntryPointInfo {
    /**
     * 主键ID
     */
    private Integer id;
    
    /**
     * 项目名称
     */
    private String projectName;
    private String packageName;
    
    /**
     * 入口类型（MAIN-主方法, API-接口方法, SCHEDULER-定时任务, MQ-消息监听）
     */
    private String entryType;
    
    /**
     * 类名
     */
    private String className;
    
    /**
     * 方法名
     */
    private String methodName;
    
    /**
     * 入口路径（如API的URL路径）
     */
    private String entryPath;
    
    /**
     * 请求方法（如GET、POST等）
     */
    private String httpMethod;
    
    /**
     * 方法注释
     */
    private String methodComment;
    
    /**
     * 业务逻辑描述
     */
    private String businessLogic;
    
    /**
     * 最后修改时间
     */
    private Date lastModifiedTime;
    
    /**
     * 最后修改人
     */
    private String lastModifiedBy;
    
    /**
     * 创建时间
     */
    private Date createdAt;
    
    /**
     * 是否可刷新
     */
    private Boolean refreshable;
    
    /**
     * 方法复杂度信息
     */
    private Integer complexity;

    /**
     * 入口类型枚举
     */
    public enum EntryType {
        /** 主方法 */
        MAIN,
        /** 接口方法 */
        API,
        /** 定时任务 */
        SCHEDULER,
        /** 消息监听 */
        MQ,
        /** 多线程入口 */
        THREAD,
        /** Redis队列处理 */
        REDIS_QUEUE;
        
        public static boolean isValid(String type) {
            try {
                valueOf(type);
                return true;
            } catch (IllegalArgumentException e) {
                return false;
            }
        }
    }
    
    /**
     * HTTP方法枚举
     */
    public enum HttpMethod {
        GET,
        POST,
        PUT,
        DELETE,
        PATCH,
        HEAD,
        OPTIONS,
        TRACE;
        
        public static boolean isValid(String method) {
            try {
                valueOf(method);
                return true;
            } catch (IllegalArgumentException e) {
                return false;
            }
        }
    }
} 